#define _CRT_SECURE_NO_WARNINGS 1

#include<cstdio>
#include<cstring>
#include<iostream>

using namespace std;

//int main()
//{
//    int p, q;
//    cin >> p >> q;
//    cout << (p - 1)*(q - 1) - 1 << endl;
//    return 0;
//}

//int n;
//
//int main()
//{
//    cin >> n;
//    int ans;
//    ans = n;
//    while (n >= 3)
//    {
//        ans += n / 3;
//        n = n / 3 + n % 3;
//    }
//    cout << ans << endl;
//    return 0;
//}

const int N = 1000;
int v[N], w[N], dp[N];
int n, V;

int main()
{
    scanf("%d%d", &n, &V);
    for (int i = 0; i < n; i++)
    {
        scanf("%d%d", &v[i], &w[i]);
    }
    for (int j = 0; j < n; j++)
    {
        for (int i = V; i >= v[j]; i--)
        {
            dp[i] = max(dp[i], dp[i - v[j]] + w[j]);
        }
    }
    printf("%d ", dp[V]);
    return 0;
}